<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Three-Level-Scheduling</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Three-Level-Scheduling"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Three-Level-Scheduling rootpage-Three-Level-Scheduling skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Three-Level-Scheduling</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr"><p><b>Three-Level-Scheduling</b> (<b>TLS</b>) unterteilt den <a href="Scheduling" title="Scheduling">Scheduling</a>-Prozess in 3 Teilprozesse:
</p>
<ul><li>Admission Scheduler</li>
<li>Memory Scheduler</li>
<li>CPU Scheduler</li></ul>
<p>Am Beginn dieses Schedulingverfahrens steht ein <a href="Warteschlange_(Datenstruktur)" title="Warteschlange (Datenstruktur)">Input Queue</a>. Dabei handelt es sich lediglich um eine Datenstruktur ähnlich einer <a href="Datenstruktur#Grundlegende_Datenstrukturen" title="Datenstruktur">Liste</a>, in der die neu ankommenden „Jobs“ zwischengespeichert werden.
</p><p>Nun kommt der <i>Admission Scheduler</i> (in der Folge AS genannt) ins Spiel. Der AS entscheidet, welcher Job ins weitere System (genauer gesagt in den Speicher) kommt. Die anderen Jobs verbleiben im Input Queue. Grundsätzlich wird versucht, einen guten Mix aus Compute-Bound Jobs (meist lange Abarbeitezeit) und <a href="Eingabe_und_Ausgabe" title="Eingabe und Ausgabe">I/O</a>-Bound Jobs (Input/Output – kurze Abarbeitezeit) zu finden und/oder kürzere Jobs längeren vorzuziehen. Der Admission Scheduler kann dabei auch Jobs, die später hinzutreten, denen im Input Queue vorziehen. Man kann den AS also als Vorfilter betrachten.
</p><p>Vom Admission Scheduler werden die Jobs dann weiter in den <a href="Arbeitsspeicher" title="Arbeitsspeicher">Arbeitsspeicher</a> geladen. Hier beginnt nun die Arbeit des <i>Memory Schedulers</i>. Da jeder Job im Speicher Platz benötigt und es durchaus vorkommen kann, dass mehrere Jobs im Speicher vorhanden sind, entscheidet der Memory Scheduler, welcher Job im Hauptspeicher verbleibt und welcher auf die Festplatte ausgelagert wird (<a href="Swapping" title="Swapping">Swap</a>). Dabei wird das „Degree of Multiprogramming“ herangezogen, um zu entscheiden, wie viele Jobs im Hauptspeicher belassen werden. Das „Degree of Multiprogramming“ beschreibt die Anzahl von Prozessen, die ein Prozessor, abhängig von Hauptspeicherauslastung und Prozessorgeschwindigkeit, effizient verarbeiten kann. Wird auf eine Ressource von mehreren Prozessen gemeinsam zugegriffen, so kann dies das „Degree of Multiprogramming“ beeinflussen. Um eine optimale <a href="Performance_(Informatik)" class="mw-redirect" title="Performance (Informatik)">Performance</a> zu gewährleisten, muss regelmäßig entschieden werden, wie viele Jobs im Speicher abgelegt werden. Es wird versucht, eine möglichst hohe CPU-Auslastung zu erreichen, wobei der Rest auf die Festplatte ausgelagert wird. Das Ein-/Auslagern ist teuer, da es vermehrt Systemressourcen beansprucht und Festplattenzugriffe verhältnismäßig langsam sind.
Kriterien des Ein-/Auslagerns:
</p>
<ul><li>Wie lange ist es her, dass der Job auf die Festplatte ausgelagert wurde?</li>
<li>Wie viel CPU-Zeit hat der Job kürzlich erhalten?</li>
<li>Wie groß ist der Job? (kleinere Jobs werden überhaupt nicht ausgelagert, da Auslagern teuer ist)</li>
<li>Wie wichtig ist der Job?</li></ul>
<p>Der <i>CPU Scheduler</i> entnimmt nun aus dem Speicher einen Job und arbeitet diesen ab (bzw. arbeitet weiter daran). Hierzu wird ein <a href="Prozess-Scheduler#Scheduling-Verfahren" title="Prozess-Scheduler">Scheduling-Verfahren</a> (meist <a href="Shortest-Job-Next" title="Shortest-Job-Next">Shortest-Job-Next</a>) verwendet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Quellen">Quellen</h2></div>
<ul><li>Andrew S. Tanenbaum: <i>Modern Operating Systems - Second Edition</i> ISBN 0-13-092641-8</li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2023-04-11" href="https://de.wikipedia.org/wiki/?title=Three-Level-Scheduling&oldid=232689180">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>